// Date: 2020.05.01

// Directory Setting
global odir "/Users/sangdong/Documents/KoPDP_2020update/merging"
global temp "temp"
global raw "raw"
global result "result"

cd $odir
capture mkdir $temp
capture mkdir $result

/*============================================================================*/

*** US epodoc number와 wku 간의 매칭 파일 생성
use $raw/US_numbers, clear
duplicates drop
format original %15.0g
gen tag = floor(original / 100000000)

* wku로 EPODOC 번호가 부여된 경우
preserve
keep if tag==0 /* original = wku 만 남김 */
keep epodoc original
rename original family
count
save $temp/US_merging_wku, replace
restore

* prior publication으로 EPODOC 번호가 부여된 경우
drop if tag==0
drop tag
rename original ppd
duplicates tag ppd, gen(dup)
drop if dup>0
drop dup
merge 1:n ppd using $raw/US_ppd, keep(3)

//     Result                           # of obs.
//     -----------------------------------------
//     not matched                       322,658
//         from master                   322,658  (_merge==1)
//         from using                          0  (_merge==2)
//
//     matched                           652,415  (_merge==3)
//     -----------------------------------------

keep epodoc wku
rename wku family

* wku로 번호가 부여된 경우와 파일 합침
append using $temp/US_merging_wku
save $temp/US_merging, replace

// . duplicates report epodoc
//
// Duplicates in terms of epodoc
//
// --------------------------------------
//    copies | observations       surplus
// ----------+---------------------------
//         1 |       357202             0
//         2 |         1848           924
//         3 |           84            56
//         4 |           16            12
//         5 |           10             8
// --------------------------------------
// 하나의 epodoc 번호에 여러개의 wku가 대응되는 경우가 있음
// 이는 이전 등록된 특허가 포기(withdrawn)된 후 재등록된 경우 등에 해당함
// 때문에 duplicate 들을 삭제하지 않고 그대로 남김
// 추후에 merge가 아닌 joinby로 머징할 필요가 있음

/*============================================================================*/

*** KR epodoc number와 appnum 간의 매칭 파일 생성

** 우선 appnum - opennumber 간의 매칭파일 생성
use $raw/KR_ppd, clear
drop if opennum==. | opendate==.
keep appnum open*
duplicates tag opennum opendate, gen(duple)
drop if duple>0
drop duple
save $temp/KR_ppd_A, replace /* 한국 특허의 출원번호 - 공개번호 간 매칭 */


** 다음 appnum - registernum 간의 매칭파일 생성
use $raw/KR_ppd, clear
drop if registernum==.
keep appnum register* 
duplicates tag registernum, gen(duple)
// --------------------------------------
//    copies | observations       surplus
// ----------+---------------------------
//         1 |      1995294             0
//         2 |          292           146
//         3 |            3             2
// --------------------------------------
// 등록번호에 여러개 2개 이상의 출원번호가 매치되는 관측 수가 극히 적으므로 누락시킴
drop if duple>0
drop duple
save $temp/KR_ppd_B1, replace /* 한국 특허의 출원번호 - 등록번호 간 매칭 */

** KR에서의 epodoc - appnum 매칭시작
use $raw/KR_numbers, clear
duplicates drop
// _N = 2,331,887

* A type부터 머징
preserve
keep if type=="A"
rename (original date) (opennum opendate)
// opennum이 20030053323와 같이 표현된 관측치는 1020030053323로 변경함
replace opennum = 1000000000000 + opennum if opennum < 1000000000000
// opennum이 1000840005219 와 같이 표현된 경우 1019840005219로 변경함
replace opennum = 19000000000 + opennum if opennum < 1019000000000
merge m:1 opennum opendate using $temp/KR_ppd_A, keepusing(appnum) keep(1 3)
//     Result                           # of obs.
//     -----------------------------------------
//     not matched                        13,302
//         from master                    13,302  (_merge==1)
//         from using                          0  (_merge==2)
//
//     matched                         2,691,454  (_merge==3)
//     -----------------------------------------
keep epodoc appnum
rename appnum family
save $temp/KR_numbers_A, replace

* B type 머징 
restore
keep if type=="B1"
rename (original date) (registernum publicationdate)
replace registernum = registernum*10000 if registernum<1000000000000
replace registernum = registernum+1000000000000 if registernum < 1000000000000
drop if registernum > 9000000000000
merge m:1 registernum using $temp/KR_ppd_B1, keepusing(appnum) keep(1 3) 
//     Result                           # of obs.
//     -----------------------------------------
//     not matched                            37
//         from master                        37  (_merge==1)
//         from using                          0  (_merge==2)
//
//     matched                           379,753  (_merge==3)
//     -----------------------------------------
keep epodoc appnum
rename appnum family
save $temp/KR_numbers_B1, replace

* A type 파일과 B type 파일을 합침
use $temp/KR_numbers_A, clear
append using $temp/KR_numbers_B1
save $temp/KR_merging, replace

/*============================================================================*/

*** equivalents 파일을 appnum 및 wku로 연결
* KR 패밀리 특허
use $raw/equivalents, clear
drop kind
keep if substr(epodoc, 1, 2) == "KR"
merge m:1 epodoc using $temp/KR_merging, keep(1 3)
//     Result                           # of obs.
//     -----------------------------------------
//     not matched                         8,333
//         from master                     8,333  (_merge==1)
//         from using                          0  (_merge==2)
//
//     matched                         3,330,335  (_merge==3)
//     -----------------------------------------
save $temp/equivalents_KR, replace

* US 패밀리 특허
use $raw/equivalents, clear
drop kind
keep if substr(epodoc, 1, 2) == "US"
joinby epodoc using $temp/US_merging
save $temp/equivalents_US, replace

* equivalents 데이터 합침
append using $temp/equivalents_KR
gsort appnum epodoc family
format family %15.0g
gen ctry = substr(epodoc, 1, 2)
order appnum epodoc ctry family
label variable family "KIPO appnum 혹은 USPTO wku"
save $result/equivalents_final, replace

* 임시파일 제거
shell rm -r $temp
